#ifndef MATEDATA_H
#define MATEDATA_H
#include <dtype.h>
//元数据基础头





//元数据表类型定义
typedef enum {
    MDTABLE_TYPE_UNKNOWN=0X00,//未定义
    MDTABLE_TYPE_NATIVE_FUNC,//本地函数引用
    MDTABLE_TYPE_LIBRARY_REF,//库引用
    MDTABLE_TYPE_TYPE_DEF,//类型定义
    MDTABLE_TYPE_TYPE_REF,//类型引用
    MDTABLE_TYPE_METHOD,//方法
    MDTABLE_TYPE_FIELD,//字段
    MDTABLE_TYPE_EVENT,//事件描述
    MDTABLE_TYPE_PROPERTY,//属性描述
    MDTABLE_TYPE_PARAM,//参数
    MDTABLE_TYPE_INTERFACE_IMPL,//接口实现描述
    MDTABLE_TYPE_MEMBER_REF,//成员引用
    MDTABLE_TYPE_TAG,//标记描述
    MDTABLE_TYPE_METHOD_IMPL,//方法实现描述
    MDTABLE_TYPE_NESTED_CLASS,//嵌套类描述
    MDTABLE_TYPE_FILE,//文件描述
    MDTABLE_TYPE_STRUCT,//结构体描述
    MDTABLE_TYPE_UNION,//共用体描述
    MDTABLE_TYPE_SUMEMBER,//结构体、联合体成员描述
    MDTABLE_TYPE_CONSTANT,//常量描述
}MDTABLE_TYPE;

//获取引用ID表类型
#define RIDgetMDTableType(RID) (type >> 24)

//获取引用ID表索引
#define RIDgetTableIndex(RID) (type & 0XFF000000)

//获取引用ID
#define GetRID(type,id) ((type << 24) | id)

#define MD_FLAGE_STATIC 0X01 //静态
#define MD_FLAGE_1 0X02 //
#define MD_FLAGE_2 0X04 //
#define MD_FLAGE_STATEMET 0X08 //声明
#define MD_FLAGE_ENUM 0X10 //枚举
#define MD_FLAGE_ENUMFLD 0X20 //枚举成员
#define MD_FLAGE_PROPMTHD 0X40 //属性自动生成方法
#define MD_FLAGE_PROPFLD 0X80 //属性自动生成字段

#define MD_FLAGE_INTERFACE 0X100 //接口
#define MD_FLAGE_OVERRID 0X200 //重写
#define MD_FLAGE_COVER 0X400 //覆盖
#define MD_FLAGE_VIRTUAL 0X800 //虚拟

//访问权限
#define MD_ACCESS_PUBLIC 0XA000 //公开
#define MD_ACCESS_PRIVATE 0XB000 //私有
#define MD_ACCESS_INTERNAL 0XC000 //内部
#define MD_ACCESS_PROTECTED 0XD000 //继承
#define MD_ACCESS_INTEPROT 0XE000 //内部、继承

#define MD_FLAG_CHECK(f,flag) ((f & flag) == flag) //检查标志


#endif
